📘 خلاصه کامل فصل هفتم · مدیریت کاربران، زمان، لاگها و ایمیل
ویژه امتحان
▍ ۱. مدیریت کاربران و گروهها
🔑 چرا کاربر اضافه میکنیم؟
- به اشتراکگذاری دسترسی بدون نیاز به root
- افزایش امنیت (از root برای کارهای روزمره استفاده نکنید)
- مدیریت بهتر و ردیابی فعالیتها
دلیل اصلی اضافه کردن کاربر: جلوگیری از استفاده مستقیم از root و افزایش امنیت.
🔸 فایلهای مهم کاربران
/etc/passwd – اطلاعات کاربران (نام کاربری، UID، GID، دایرکتوری خانه، شل)
/etc/shadow – رمزهای عبور هششده (فقط root قابل خواندن)
/etc/group – اطلاعات گروهها
/etc/login.defs – سیاستهای رمز عبور (PASS_MAX_DAYS, PASS_MIN_LENGTH و ...)
/etc/default/useradd – تنظیمات پیشفرض useradd
/etc/skel/ – فایلهای پیشفرض کپی به دایرکتوری خانه کاربر جدید
پارامترهای مهم /etc/login.defs: PASS_MAX_DAYS (انقضای رمز)، PASS_MIN_LENGTH (حداقل طول)، PASS_WARN_AGE (هشدار قبل از انقضا)
🔸 دستورات اصلی مدیریت کاربران
| دستور | کاربرد |
useradd username | ایجاد کاربر جدید |
useradd -D | مشاهده تنظیمات پیشفرض useradd |
passwd username | تنظیم/تغییر رمز عبور |
passwd -l username | لاک کردن کاربر |
passwd -u username | آزاد کردن کاربر |
passwd -d username | حذف رمز (خطرناک! حتماً لاک کنید) |
passwd -S username | نمایش وضعیت رمز عبور |
usermod -aG group username | اضافه کردن کاربر به گروه ثانویه |
usermod -s /bin/bash username | تغییر شل پیشفرض |
userdel -r username | حذف کاربر با دایرکتوری خانه |
groupadd groupname | ایجاد گروه جدید |
▍ ۲. تشخیص لاک شدن کاربر (علامت ! در کجاست؟)
👀 علامت تعجب (!) در کجای سیستم نشاندهنده لاک شدن کاربر است؟
در فایل /etc/shadow، اگر در ابتدای فیلد دوم (فیلد رمز عبور) علامت ! یا !! قرار داشته باشد، یعنی کاربر لاک (قفل) شده است و نمیتواند با رمز عبور وارد سیستم شود.
نکته امتحانی: علامت ! در ابتدای فیلد دوم فایل /etc/shadow قرار میگیرد.
🔸 روشهای تشخیص لاک بودن کاربر
| روش | دستور | خروجی در صورت لاک بودن |
| دستور مخصوص (سادهترین) |
sudo passwd -S username |
username L ... (حرف L نشاندهنده Locked است) |
| مشاهده مستقیم فایل |
sudo grep username /etc/shadow |
فیلد دوم با ! شروع میشود: username:!:... |
✅ خلاصه تشخیص لاک:
passwd -S → اگر خروجی شامل L بود، کاربر لاک است.
/etc/shadow → اگر فیلد رمز با ! شروع میشد، کاربر لاک است.
- دستور لاک کردن:
sudo passwd -l username
- دستور آزاد کردن:
sudo passwd -u username
نکته: اگر رمز کاربر با * شروع شود، یعنی کاربر هرگز رمز عبور نداشته یا سرویسدهی غیرفعال است (مثل کاربران سیستمی). اگر فیلد رمز خالی باشد، کاربر بدون رمز عبور است (بسیار خطرناک!).
▍ ۳. پیادهسازی su و sudo
🔴 su
- نیاز به رمز root
- همه دستورات با دسترسی root
- لاگ دقیق ندارد
su - محیط کاربر را هم تغییر میدهد
🔵 sudo
- نیاز به رمز خود کاربر
- فقط دستور مشخص با دسترسی root
- لاگ در
/var/log/auth.log
sudo -l → لیست دستورات مجاز
تفاوت اصلی: su نیاز به رمز root دارد و همه دستورات را با root اجرا میکند، اما sudo نیاز به رمز خود کاربر دارد و فقط دستورات مشخص را اجرا میکند.
🔸 فایل /etc/sudoers (با visudo ویرایش کنید)
ali ALL=(ALL:ALL) ALL → ali میتواند همه دستورات را با sudo اجرا کند.
%admin ALL=(ALL:ALL) ALL → همه کاربران گروه admin.
ali ALL=(ALL:ALL) /usr/bin/apt → فقط apt.
ali ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt → بدون رمز عبور.
نکته: NOPASSWD برای اسکریپتهای خودکار مفید است اما امنیت را کاهش میدهد.
▍ ۴. Mail Transfer Agent (MTA)
📧 ساختار ایمیل در لینوکس:
- MTA (Mail Transfer Agent): ارسال و دریافت بین سرورها (Postfix, Sendmail, Exim)
- MDA (Mail Delivery Agent): تحویل به صندوق کاربر (Procmail)
- MUA (Mail User Agent): برنامه کاربر برای خواندن/نوشتن (Thunderbird, mail, s-nail)
🔸 نصب Postfix (MTA محبوب)
└─$ sudo apt install postfix # دبیان
└─$ sudo dnf install postfix # رد هت
└─$ sudo systemctl enable --now postfix
🔸 s-nail (MUA خط فرمان مدرن)
نسخه مدرن mailx با پشتیبانی از SMTP، SSL و احراز هویت.
└─$ sudo apt install s-nail # دبیان
└─$ sudo dnf install s-nail # رد هت
🔸 تنظیمات ~/.mailrc برای ارسال ایمیل خارجی
set smtp=smtps://smtp.gmail.com:465
set smtp-auth=login
set smtp-auth-user=your_email@gmail.com
set smtp-auth-password=your_app_password
set from=your_email@gmail.com
⚠️ هشدار امنیتی! از رمز عبور مخصوص برنامه (App Password) استفاده کنید، نه رمز اصلی.
🔸 ارسال ایمیل با s-nail
mail recipient@example.com → تایپ مستقیم (Ctrl+D ارسال)
echo "متن" | mail -s "موضوع" user@example.com
cat file.txt | mail -s "موضوع" user@example.com
mail -s "موضوع" -a /path/file.pdf user@example.com < /dev/null → با پیوست
-a در s-nail برای پیوست (Attachment) است.
▍ ۵. مدیریت لاگها (Logging)
🔸 تفاوت Process و Daemon
- Process: برنامه در حال اجرا (مثل
ls)
- Daemon: سرویس پسزمینه (مثل
sshd, cron)
🔸 سه دسته اصلی لاگ
- Application Log: لاگ هر برنامه در
/var/log/
- syslog / rsyslog: سیستم متمرکز قدیمی (فایل پیکربندی
/etc/rsyslog.conf)
- journal: systemd لاگ باینری (دستور
journalctl)
🔸 syslog Facilities مهم
kern (هسته)، user (کاربر)، mail (ایمیل)، daemon (سرویسها)، auth (امنیت)، cron
🔸 logrotate (چرخش خودکار لاگها)
- فایل پیکربندی:
/etc/logrotate.conf
- پارامترها:
rotate 7 (تعداد نسخهها)، weekly، compress
🔸 journalctl (مشاهده لاگهای systemd)
| گزینه | کاربرد |
journalctl | نمایش همه لاگها |
journalctl -u service | لاگ یک سرویس خاص |
journalctl -n 10 -r | ۱۰ لاگ آخر به ترتیب معکوس |
journalctl -p err | فقط خطاها و بالاتر |
journalctl --since "today" | از امروز |
journalctl --disk-usage | میزان فضای اشغالشده |
journalctl --vacuum-size=300M | کاهش به ۳۰۰ مگابایت |
مدیریت فضای journal: --vacuum-size و --vacuum-time
▍ ۶. مدیریت زمان در لینوکس
🕐 مبداء زمان (Epoch): January 1, 1970
🔸 دو نوع زمان
- زمان سختافاری (RTC): روی مادربرد (باتری CMOS) – دستور
hwclock
- زمان سیستمی (System Clock): در حال اجرا – دستورات
date و timedatectl
🔸 دستورات مهم زمان
| دستور | کاربرد |
date | نمایش زمان سیستمی |
date +%s | تعداد ثانیه از Epoch |
hwclock | نمایش زمان سختافاری |
hwclock --systohc | ذخیره زمان سیستمی در سختافزار |
hwclock --hctosys | خواندن از سختافزار و تنظیم سیستم |
timedatectl | مدیریت جامع زمان و NTP |
timedatectl set-timezone Asia/Tehran | تنظیم منطقه زمانی |
timedatectl set-ntp true | فعالسازی NTP |
نکات کلیدی زمان:
date ≠ time (time اندازهگیری زمان اجراست)
hwclock نیاز به sudo دارد
timedatectl روش مدرنتر از hwclock است
- روش قدیمی تنظیم timezone:
ln -sf /usr/share/zoneinfo/Asia/Tehran /etc/localtime
▍ جمعبندی نهایی برای امتحان
📌 نکات طلایی فصل هفتم:
- مدیریت کاربران:
useradd, passwd, usermod, userdel -r
- فایلهای مهم:
/etc/passwd, /etc/shadow, /etc/group, /etc/login.defs
- لاک کردن کاربر:
passwd -l | آزاد کردن: passwd -u
- علامت ! در کجاست؟ ابتدای فیلد دوم در
/etc/shadow
- تشخیص لاک:
passwd -S (خروجی با L) یا grep /etc/shadow
- sudo vs su: sudo امنتر است و لاگ دارد
- sudoers: با
visudo ویرایش کنید
- MTA: Postfix (مدرن) جایگزین Sendmail
- MUA:
s-nail (خط فرمان) و mail
- لاگها: syslog (rsyslog) و journal (systemd)
- journalctl:
-u (سرویس)، -n (تعداد)، -r (معکوس)، -p (اولویت)
- زمان: Epoch = 1970/01/01،
hwclock (سختافار)، timedatectl (سیستمی)
- NTP: هماهنگسازی زمان با
timedatectl set-ntp true